import express from 'express';
import path from "path";
import fs from "fs/promises";
import fsSync from 'fs';
// 音频文件路径（替换为你的音频文件）
const AUDIO_PATH = path.join(__dirname, '../../public/assets/audio', '1.mp3');
const router = express.Router();
router.get('/audio/:id', async (req, res) => {
  try {
    const id = req.params.id;

    // 获取文件信息
    const stats = await fs.stat(AUDIO_PATH);
    const fileSize = stats.size;

    // 设置MIME类型（根据实际音频格式修改）
    // MP3: audio/mpeg; WAV: audio/wav; OGG: audio/ogg
    res.setHeader('Content-Type', 'audio/mpeg');
    res.setHeader('Accept-Ranges', 'bytes');

    // 处理Range请求（支持断点续传和部分加载）
    if (req.headers.range) {
      // 解析Range头（格式：bytes=start-end）
      const range = req.headers.range;
      const parts = range.replace(/bytes=/, '').split('-');
      const start = parseInt(parts[0], 10);
      // 若未指定结束位置，默认取文件末尾或start+1MB（避免一次性返回过大内容）
      const end = parts[1] ? parseInt(parts[1], 10) : Math.min(start + 1024 * 1024, fileSize - 1);
      console.log(`需要返回文件 ${id} 为的文件数据：bytes ${start}-${end}/${fileSize}`);

      // 校验范围有效性
      if (start >= fileSize || end >= fileSize) {
        res.status(416).setHeader('Content-Range', `bytes */${fileSize}`);
        return res.end();
      }

      // 返回部分内容
      res.status(206); // 206 Partial Content
      res.setHeader('Content-Range', `bytes ${start}-${end}/${fileSize}`);
      res.setHeader('Content-Length', end - start + 1);

      // 创建文件读取流（只读取指定范围）
      const stream = fsSync.createReadStream(AUDIO_PATH, {start, end});
      stream.pipe(res);

    } else {
      // 无Range头时，返回整个文件（不推荐，建议始终使用Range）
      res.setHeader('Content-Length', fileSize);
      const stream = fsSync.createReadStream(AUDIO_PATH);
      stream.pipe(res);
    }

  } catch (err) {
    console.error('音频服务错误:', err);
    res.status(404).send('音频文件未找到');
  }
})

module.exports = router;
